home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / sound / fftscop4.zip / BATCH.C next >
C/C++ Source or Header  |  1994-06-29  |  37KB  |  1,590 lines

  1. #include <dos.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <conio.h>
  5. #include <alloc.h>
  6. #include <string.h>
  7. #include <mem.h>
  8. #include <math.h>
  9. #define    TWO_PI    ((double)2.0 * M_PI)
  10.  
  11. typedef unsigned char DacPalette256[256][3];
  12. typedef struct tagBITMAPFILEHEADER
  13. {
  14.         unsigned int  bfType;                   // "BM" or 0x4D42
  15.         unsigned long bfSize;                   // Size of file in bytes
  16.         unsigned int  bfReserved1;              // Set to 0
  17.         unsigned int  bfReserved2;              // Set to 0
  18.         unsigned long bfOffBits;                // Offset in file where
  19.                                                 // the bits begin
  20. } BITMAPFILEHEADER;
  21.  
  22. typedef struct tagBITMAPINFOHEADER
  23. {
  24.         unsigned long biSize;                   // Size of the structure
  25.         unsigned long biWidth;                  // Width in pixels
  26.         unsigned long biHeight;                 // Height in pixels
  27.         unsigned int  biPlanes;                 // # of color Planes: Set to 1
  28.         unsigned int  biBitCount;               // Color bits per pixel
  29.         unsigned long biCompression;            // Compression Scheme
  30.         unsigned long biSizeImage;              // Number of bitmap bytes
  31.         unsigned long biXPelsPerMeter;          // Horizontal Resolution
  32.         unsigned long biYPelsPerMeter;          // Vertical Resolution
  33.         unsigned long biClrUsed;                // Number of colors used
  34.         unsigned long biClrImportant;           // Important colors
  35.  
  36. } BITMAPINFOHEADER;
  37.  
  38. char bildname[70];
  39. unsigned char far *VGAmem;
  40. struct text_info tiGFX;
  41. struct REGPACK regp;
  42. union  REGS reg;
  43. int Linecolor=1,WritePage=0,HighSpeed=0,Triggerbuffer=999;
  44. int minX=0,minY=0,maxx=320,maxy=200;
  45. BITMAPFILEHEADER BMPHeader;
  46. BITMAPINFOHEADER BMPInfo;
  47. double stauch=1;                //Bilschirmstauchfaktor
  48. int Xadd=0,Yadd=0;           //Position der linken Oberen Ecke der BMP
  49. long BytesDiff,BytesTMP;
  50.  
  51. DacPalette256 Hallo;
  52.  
  53. /* Globals */
  54.  
  55. int    samples, power;
  56. double    real[2048], imag[2048], max, Pegel=10,FFTmax;
  57. FILE    *fpi, *fpo;
  58.  
  59. /* Prototypes and forward declarations */
  60.  
  61. void    fft(void), max_amp(void);
  62. int    permute(int);
  63. double    magnitude(int);
  64. void dspwrite ( unsigned char );
  65. unsigned char dspread ( void );
  66. unsigned Buffer[2048];
  67. unsigned SBuffer[8900];
  68. unsigned char far *data;
  69. unsigned char far *aligned;
  70. unsigned char far aligned_physical;
  71.  
  72. /* Getvgapalette256 gets the entire 256 color palette */
  73. /* PalBuf contains RGB values for all 256 colors      */
  74. /* R,G,B values range from 0 to 63                  */
  75. /* Usage:                          */
  76. /*  DacPalette256 dac256;                  */
  77. /*                              */
  78. /* getvgapalette256(&dac256);                  */
  79. void getvgapalette256(DacPalette256 *PalBuf)
  80. {
  81.   regp.r_ax = 0x1017;
  82.   regp.r_bx = 0;
  83.   regp.r_cx = 256;
  84.   regp.r_es = FP_SEG(PalBuf);
  85.   regp.r_dx = FP_OFF(PalBuf);
  86.   intr(0x10,®p);
  87. }
  88.  
  89. /* Setvgapalette256 sets the entire 256 color palette */
  90. /* PalBuf contains RGB values for all 256 colors      */
  91. /* R,G,B values range from 0 to 63                  */
  92. /* Usage:                          */
  93. /*  DacPalette256 dac256;                  */
  94. /*                              */
  95. /* setvgapalette256(&dac256);                  */
  96. void setvgapalette256(DacPalette256 *PalBuf)
  97. {
  98.   regp.r_ax = 0x1012;
  99.   regp.r_bx = 0;
  100.   regp.r_cx = 256;
  101.   regp.r_es = FP_SEG(PalBuf);
  102.   regp.r_dx = FP_OFF(PalBuf);
  103.   intr(0x10,®p);
  104. }
  105.  
  106.  
  107.  
  108. void Grafik(int GFXmode)  // 13,      14,     17mono,   18,      19vga,  -1,3
  109. {                         //320x200, 640x200, 640x480, 640x480, 320x200, text
  110. VGAmem=(char far *)MK_FP(0xa000,0);
  111. if (GFXmode>=0)
  112.   {
  113.    gettextinfo(&tiGFX);
  114.    regp.r_ax = GFXmode;
  115.    intr(0x10,®p);
  116.   }
  117. if (GFXmode<0)
  118.   {
  119.    regp.r_ax = tiGFX.currmode;
  120.    intr(0x10,®p);
  121.   }
  122. }
  123.  
  124.  
  125.  
  126. void Putpixel(int x, int y)
  127. {
  128.  reg.h.ah = 0x0c;
  129.  reg.h.al = Linecolor;
  130.  reg.h.bh = WritePage;
  131.  reg.x.cx = x;
  132.  reg.x.dx = y;
  133.  int86(0x10,®,®);
  134. }
  135.  
  136.  
  137.  
  138. void Putpixel2(int x, int y)
  139. {
  140.  reg.h.ah = 0x0c;
  141.  reg.h.al = 0;
  142.  reg.h.bh = WritePage;
  143.  reg.x.cx = x;
  144.  reg.x.dx = y;
  145.  int86(0x10,®,®);
  146. }
  147.  
  148.  
  149.  
  150. void Putpixel3(int x, int y)
  151. {
  152.  reg.h.ah = 0x0c;
  153.  reg.h.al = 235-y;
  154.  reg.h.bh = WritePage;
  155.  reg.x.cx = x;
  156.  reg.x.dx = y;
  157.  int86(0x10,®,®);
  158. }
  159.  
  160.  
  161.  
  162. int Getpixel(int x, int y)
  163. {
  164.  if(x<minX)return 0;
  165.  if(y<minY)return 0;
  166.  if(x>=maxx)return 0;
  167.  if(y>=maxy)return 0;
  168.  reg.h.ah = 0x0d;
  169.  reg.h.bh = WritePage;
  170.  reg.x.cx = x;
  171.  reg.x.dx = y;
  172.  int86(0x10,®,®);
  173.  return reg.h.al;
  174. }
  175.  
  176.  
  177.  
  178. void singlecolor256(int nr,int r,int g,int b)
  179. {
  180.  reg.h.ah = 0x10;
  181.  reg.h.al = 0x10;
  182.  reg.x.bx = nr;
  183.  reg.h.ch = g;
  184.  reg.h.cl = b;
  185.  reg.h.dh = r;
  186.  int86(0x10,®,®);
  187. }
  188.  
  189.  
  190.  
  191. void singlecolor16(int nr,int r,int g,int b)
  192. {
  193.  reg.h.ah=0x10;
  194.  reg.h.al=0x07;
  195.  reg.h.bl=nr;
  196.  int86(0x10,®,®);
  197.  nr=reg.h.bh;
  198.  reg.h.ah = 0x10;
  199.  reg.h.al = 0x10;
  200.  reg.x.bx = nr;
  201.  reg.h.ch = g;
  202.  reg.h.cl = b;
  203.  reg.h.dh = r;
  204.  int86(0x10,®,®);
  205. }
  206.  
  207.  
  208.  
  209. void setzePunkt(int Xposi,int Yposi,int Farben)
  210. {
  211.  int xx=Xadd+(Xposi/stauch),yy=Yadd+(Yposi/stauch);
  212.  if((xx<0)||(yy<0)||(xx>=320)||(yy>=200))return;
  213.  *(VGAmem+xx+320*yy)=Farben;
  214. }
  215.  
  216.  
  217. void leseBMP1(char *BMPFile)  //1Bit BMP-Datei
  218. {
  219. int filepos=0,fx=0,fy=0,farbe;
  220. FILE *Fn;
  221. Fn=fopen(BMPFile,"rb");                  //überlese File-Header
  222. for(filepos=0;filepos<(BMPHeader.bfOffBits);filepos++)farbe=getc(Fn);
  223. for(farbe=0;farbe<8;farbe++)Buffer[farbe]= 63*(farbe &4);
  224. for(farbe=0;farbe<16;farbe++)
  225.    {                                     //codiere Farbpalette:
  226.     Hallo[farbe][2]=Buffer[4*farbe+0]/4;
  227.     Hallo[farbe][1]=Buffer[4*farbe+1]/4;
  228.     Hallo[farbe][0]=Buffer[4*farbe+2]/4;
  229.    }
  230. setvgapalette256(&Hallo);                //aktiviere Palette "Hallo"
  231. BytesDiff=BMPInfo.biWidth%32;
  232. if (BytesDiff>0)BytesDiff=4-BytesDiff/8-((BytesDiff%8>0)?1:0);
  233. for(fy=0;fy<BMPInfo.biHeight;fy++)       //lese Bitmap...
  234.    {
  235.     for(fx=0;fx<BMPInfo.biWidth;)        //benutzt Farbe 0/1
  236.        {
  237.     farbe=getc(Fn);
  238.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),(farbe&128)/128);
  239.         if(fx>=BMPInfo.biWidth)break;
  240.     farbe<<=1;
  241.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),(farbe&128)/128);
  242.         if(fx>=BMPInfo.biWidth)break;
  243.     farbe<<=1;
  244.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),(farbe&128)/128);
  245.         if(fx>=BMPInfo.biWidth)break;
  246.     farbe<<=1;
  247.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),(farbe&128)/128);
  248.         if(fx>=BMPInfo.biWidth)break;
  249.     farbe<<=1;
  250.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),(farbe&128)/128);
  251.         if(fx>=BMPInfo.biWidth)break;
  252.     farbe<<=1;
  253.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),(farbe&128)/128);
  254.         if(fx>=BMPInfo.biWidth)break;
  255.     farbe<<=1;
  256.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),(farbe&128)/128);
  257.         if(fx>=BMPInfo.biWidth)break;
  258.     farbe<<=1;
  259.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),(farbe&128)/128);
  260.        }
  261.     BytesTMP=BytesDiff;
  262.     while(BytesTMP--)farbe=getc(Fn);
  263.    }
  264.  fclose(Fn);
  265. }
  266.  
  267.  
  268.  
  269. void leseBMP4(char *BMPFile)  //4Bit BMP-Datei
  270. {
  271. int filepos=0,fx=0,fy=0,farbe,poff;
  272. FILE *Fn;
  273. Fn=fopen(BMPFile,"rb");                  //lese Farbpalette...
  274. for(filepos=0;filepos<(BMPHeader.bfOffBits-64);filepos++)farbe=getc(Fn);
  275. for(poff=0;poff<64;poff++,filepos++) Buffer[poff]=getc(Fn);
  276. for(farbe=0;farbe<16;farbe++)
  277.    {                                     //codiere Farbpalette:
  278.     Hallo[farbe][2]=Buffer[4*farbe+0]/4;
  279.     Hallo[farbe][1]=Buffer[4*farbe+1]/4;
  280.     Hallo[farbe][0]=Buffer[4*farbe+2]/4;
  281.    }
  282. setvgapalette256(&Hallo);                //aktiviere Palette "Hallo"
  283. BytesDiff=BMPInfo.biWidth&7;
  284. BytesTMP=BytesDiff;
  285. if(BytesTMP>0)BytesDiff=4-(BytesTMP>>1)-(BytesTMP&1);
  286.  for(fy=0;fy<BMPInfo.biHeight;fy++)       //lese Bitmap...
  287.    {
  288.     BytesTMP=BytesDiff;
  289.     for(fx=0;fx<BMPInfo.biWidth;)
  290.        {
  291.     farbe=getc(Fn);
  292.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),(farbe>>4)&15);
  293.         if(fx>=BMPInfo.biWidth)break;
  294.     setzePunkt(fx++,((BMPInfo.biHeight-1)-fy),farbe&15);
  295.        }
  296.     while(BytesTMP--)farbe=getc(Fn);
  297.    }
  298.  fclose(Fn);
  299. }
  300.  
  301.  
  302.  
  303. void leseBMP8(char *BMPFile)  //8Bit BMP-Datei
  304. {
  305. int filepos=0,poff=0,fx=0,fy=0,farbe;
  306. FIL